package controllers;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.String;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import models.Article;
import models.User;
import play.mvc.*;
import play.i18n.Messages;
import play.data.validation.Valid;
import play.db.jpa.Blob;

@With(Secure.class)
public class Articles extends Controller {

    public static User user;

    @Before
    static void setConnectedUser() {
        if (Security.isConnected()) {
            user = User.find("byUsername", Security.connected()).first();
            renderArgs.put("user", user);
        }
    }

    public static void show(Long id) {
        Article entity = Article.findById(id);
        render(entity);
    }

    public static void list() {
        List<Article> entities = models.Article.find("order by created desc").fetch();
        render(entities);
    }

    public static void create(Article entity) {
        render(entity);
    }

    public static void edit(Long id) {
        Article entity = Article.findById(id);
        render(entity);
    }

    public static void delete(Long id) {
        Article entity = Article.findById(id);
        entity.delete();
        flash.success(Messages.get("Articles.deleted"));
        Articles.list();
    }

    public static void save(File imgArticle, @Valid Article entity) {
        if (validation.hasErrors()) {
            System.out.println(validation.toString());
            flash.error(Messages.get("validation"));
            render("@create", entity);
        } else {
            //test et copie de la photo dans le répertoire \public\images\articles\
            //le nom de l'image est temporaire a la sortie du try
            try {
                if (imgArticle.length() <= (1024 * 100)) { //max length = 100ko

                    // on doit compléter tous les champs (Not NULL dans la bdd)
                    entity.created = new Date();
                    entity.updated = entity.created;
                    entity.user = User.find("byUsername", Security.connected()).first();
                    entity.resume = entity.formatResume();

                    //entity.images sera = à "entity.id.toString()
                    //Pour le moment, l'id n'a pas été généré, donc "temp"
                    entity.images = "temp";
                    entity.save(); //entity.id est généré ici par play!

                    String[] split = imgArticle.getName().split("\\.");
                    String ext = split[1];
                    //On déplace et renomme le fichier avec entity.id
                    File dest = new File("C:\\Users\\Doudoupe\\Documents\\NetBeansProjects\\eddrivecom\\public\\images\\Articles\\" + entity.id + "." + ext);

                    Boolean renamed = imgArticle.renameTo(dest);
                    System.out.println("fichier renommé : " + renamed + " en " + dest.getName() + " a l'emplacement " + dest.getPath());

                    // On modifie finalement entity.images
                    entity.images = entity.id.toString() + "." + ext;
                    entity.save();
                } else {
                    flash.error(Messages.get("Articles.upload"));
                    render("@create", entity);
                }

            } catch (NullPointerException e) {
                System.out.println("No picture to upload, default image is set");
                entity.images = "0.jpg";

                // on complete les autres champs de notre entité
                entity.created = new Date();
                entity.updated = entity.created;
                entity.user = User.find("byUsername", Security.connected()).first();
                entity.resume = entity.formatResume();
                entity.save();

            }
            flash.success(Messages.get("Articles.created"));
            Articles.list();
        }
    }

    public static void update(File imgArticle, @Valid Article entity) {
        if (validation.hasErrors()) {
            System.out.println(validation.toString());
            flash.error(Messages.get("validation"));
            render("@create", entity);
        } else {


            //test et copie de la photo
            try {
                if (imgArticle.length() <= (1024 * 100)) {

                    //on récupère l'extension du fichier
                    String[] split = imgArticle.getName().split("\\.");
                    String ext = split[1];

                    //On déplace et renomme le fichier avec entity.id
                    File dest = new File("C:\\Users\\Doudoupe\\Documents\\NetBeansProjects\\eddrivecom\\public\\images\\Articles\\" + entity.id + "." + ext);

                    Boolean deleted = dest.delete();
                    System.out.println("ancienne image supprimée? " + deleted);
                    Boolean renamed = imgArticle.renameTo(dest);
                    System.out.println("fichier renommé déplacé vers le dossier Images? " + renamed);

                    // On modifie finalement les données automatiques
                    entity.updated = new Date();
                    entity.resume = entity.formatResume();
                    entity.images = entity.id.toString() + "." + ext;
                    entity = entity.merge();
                    entity.save();


                } else {
                    flash.error(Messages.get("Articles.upload"));
                    render("@create", entity);
                }

            } catch (NullPointerException e) {


                // on complete les autres champs de notre entité devant être modifié
                System.out.println(entity.id);
                entity.updated = new Date();
                entity.resume = entity.formatResume();

                entity = entity.merge();
                entity.save();
            }

            flash.success(Messages.get("Articles.updated"));
            Articles.list();
        }
    }
}
